package com.icinfo.cloud.provider.punish.ucase.casemain.dto;

import com.icinfo.framework.tools.utils.StringUtils;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.sql.Timestamp;
import java.util.List;

/**
 * @author lxj
 * @date 2022/2/15
 **/
@Data
public class CaseQueryDto implements Serializable {
    private static final long serialVersionUID = 1L;

    /****
     * 查询标识 : 0.代办任务列表，1.已完结列表 ,2全部列表
     **/
    @NotNull(message = "查询标识不能为空")
    private Integer waitHandleFlag;
    /****
     * 案件查询标识 ：0.案件办理列表（包括暂存和立案数据）,1.案件查询（不包括暂存和立案数据）
     **/
    private Integer caseQueryFlag;
    /**
     * 登录人员id
     */

    private String userId;
    /**
     * 分页参数 页码数
     */
    @NotNull
    private Integer pageNum;

    /**
     * 分页参数 每页条数
     */
    @NotNull
    private Integer length;
    /**
     * 时效
     **/
    private String timeColor;
    /**
     * 案件编号
     **/
    private String caseNumber;
    /**
     * 当事人姓名
     **/
    private String partyName;

    /**
     * 当事人类型集合
     */
    private List<String> partyNameTypeList;

    /**
     * 案发详细地址
     */
    private String caseHappenAddressDetail;

    /**
     * 文书文号
     */
    private String documentNumber;

    /**
     * 违法级别
     */
    private String illegalLevel;

    /**
     * 案由--模糊查询
     **/
    private String caseReason;

    /**
     * 案件来源
     **/
    private String caseSource;

    /**
     * 办案阶段
     **/
    private String caseStage;

    /**
     * 办案期限
     **/
    private Integer timeLimit;

    /**
     * 立案时间--开始
     **/
    private String  registerStartTime;
    /**
     * 立案时间---结束
     **/
    private String registerEndTime;


    /**
     * 结案时间--开始
     **/
    private String caseEndStartTime;
    /**
     * 结案时间---结束
     **/
    private String caseEndEndTime;


    /**
     * 裁决完毕时间--开始
     **/
    private String verdictStartTime;
    /**
     * 裁决完毕时间---结束
     **/
    private String verdictEndTime;

    /**
     * 执法部门-区域编码
     **/
    private String enforceRegiCode ;
    /**
     * 执法部门-领域编码
     **/
    private String enforceLineCode;
    /**
     * 执法部门-领域编码数组
     **/
    private List enforceLineCodeList;
    /**
     * 执法部门-机构编码
     **/
    private String enforceOrgCode ;
    /**
     * 执法部门-部门编码
     **/
    private String enforceDeptCode ;
    /**
     * 执法部门-区域编码级别 2-市级 3-区县 4-乡镇
     **/
    private String enforceRegiLevel ;


    /**
     * 执法部门-机构
     **/
    private String orgCode ;


    /**
     * 领域编码
     **/
    private String territoryCode;

    /**
     * 案卷号
     **/
    private String caseFileNumber;

    /**
     * 处罚结果
     **/
    private String punishKind;


    /**
     * 增加查询条件
     *
     * 1、案件类型：简易程序、普通程序和简案快办。
     *
     * 2、处罚结论：予以处罚、不予处罚；
     *
     * 3、处罚种类：包含系统支持的所有处罚种。
     *
     * 4、执行方式：强制执行、自觉履行。
     *
     * 5、案件状态
     *   a、待立案（《立案审批表》待提交的时候）
     *
     *   b、立案审批（《立案审批表》
     *
     *   c、办案中
     *
     *   d、暂停（中止）
     *
     *   e、已终止
     *
     *   f、已结案
     */

    /**
     * 案件状态
     *   CASE_REGISTER("0", "待立案"),
     *     CASE_APPROVE("1", "立案审批"),
     *     HANDLING_CASE("2", "办案中"),
     *     END_CASE("3", "结案"),
     *     TEMP("4", "立案暂存"),
     *     SUSPEND("5", "暂停/中止"),
     *     TERMINATE("8", "终止"),
     *     POSTPONE("6", "案件延期"),
     *     REVOKE("7", "立案撤销"),
     *     PUNISH_REVOKE("9", "决定撤销");
     */
    private String caseStatus;

    /**
     * 执行方式 字典取值传汉字
     */
    private String executeType;

    /**
     * 处罚种类 字典取值传汉字
     */
    private String punishKinds;

    /**
     * 案件类型：简易程序、普通程序和简案快办 分别对应 1、 2、 3
     */
    private String caseType;

    /**
     * 程序类型：正常程序和快办 分别对应 2、 3
     */
    private String procedureType;

    /**
     * 处罚结论: 1 予以处罚, 2 不予处罚
     * @param
     */
    private String punishConclusion;

    /**
     * 处罚金额（最小）
     */
    private String punishMoneyMin;

    /**
     * 处罚金额（最大）
     */
    private String punishMoneyMax;


    /**
     * 查询列表类型 1:工作台或各阶段查询(不包含办结案件查询) 2:全部待办或案件查询
     */
    private String queryListType;


    /****
     * 当事人查询类别 个人 (1 个人 2 法人) （后端使用）
     **/
    private String  personPartyType;

    /****
     *  当事人查询类别 法人类别查询条件（后端使用）
     **/
    private List<String>  legalPartyTypeList;

    /**
     * 主办人(支持模糊查询)
     */
    private String mainHandlePerson;

    /**
     * 协办人(支持模糊查询)
     */
    private String helpHandlePerson;


    /**
     * 是否委托执法 0 否  1 是  可以为空
     */
    private String entrust;

    /**
     * 委托执法条线码
     */
    private String entrustEnforceLineCode;

    /**
     * 委托事项码
     **/
    private String entrustTerritoryCode;


    /**
     * 委托单位名称
     */
    private String clientOrgName;

    /**
     * 委托部门-区域编码
     */
    private String areaCode;
    /**
     * 委托单位-委托单位代码
     */
    private String clientOrgCode;

    /**
     * 被委托单位名称（办案人所属机构）
     */
    private String handleOrgName;

    /**
     * 是否公安委托执法 1是  0否
     */
    private String isPublicSecurity;

    /**
     * 公安委托事项id
     */
    private String itemRelationCode;

    /**
     * 公安委托事项模糊关键字
     */
    private String entrustCaseReasonName;


    /**
     * ===============================以下可能是无效参数=============================
     */
    /**
     * 标签列表--不用传
     **/
    private List tagList;
    /**
     * 机构编码列表--不用传
     **/
    private List orgCodeList;
    /**
     * 部门编码列表--不用传
     **/
    private List deptCodeList;
    /**
     * 部门机构判断--不用传
     **/
    private Integer org;
    /**
     * 时效--开始
     **/
    private Timestamp timeLimitStart;
    /**
     * 时效---结束
     **/
    private Timestamp timeLimitEnd;
    /**
     * 后台使用，前端忽略
     * @param
     */
    private String blue;
    /**
     * 案件标签
     **/
    private String caseTag;
    /**
     * 时效颜色 red-超期 yellow-即将超期 blue-正常
     */
    private String caseTimeColor;

    /**
     * 是否查询简案快办案件 0:否 1:是
     */
    private String isQueryFastCase;

    /**
     *
     * @param registerStartTime
     */
    private List<String> areaCodes;


    public void setRegisterStartTime(String registerStartTime) {
        if(StringUtils.isNotEmpty(registerStartTime)){
            registerStartTime = registerStartTime+" 00:00:00";
        }
        this.registerStartTime = registerStartTime;
    }

    public void setRegisterEndTime(String registerEndTime) {
        if(StringUtils.isNotEmpty(registerEndTime)){
            registerEndTime = registerEndTime+" 23:59:59";
        }
        this.registerEndTime = registerEndTime;
    }

    public void setCaseEndStartTime(String caseEndStartTime) {
        if(StringUtils.isNotEmpty(caseEndStartTime)){
            caseEndStartTime = caseEndStartTime+" 00:00:00";
        }
        this.caseEndStartTime = caseEndStartTime;
    }

    public void setCaseEndEndTime(String caseEndEndTime) {
        if(StringUtils.isNotEmpty(caseEndEndTime)){
            caseEndEndTime = caseEndEndTime+" 23:59:59";
        }
        this.caseEndEndTime = caseEndEndTime;
    }

    public void setVerdictStartTime(String verdictStartTime) {
        if(StringUtils.isNotEmpty(verdictStartTime)){
            verdictStartTime = verdictStartTime+" 00:00:00";
        }
        this.verdictStartTime = verdictStartTime;
    }

    public void setVerdictEndTime(String verdictEndTime) {
        if(StringUtils.isNotEmpty(verdictEndTime)){
            verdictEndTime = verdictEndTime+" 23:59:59";
        }
        this.verdictEndTime = verdictEndTime;
    }
}
